package hr.ctg.domain.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;

import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import org.hibernate.validator.NotNull;

@Entity
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@Table(name = "adresa")
@NamedQueries( { @NamedQuery(name = "Adresa.findByIdObjekta", query = "select a from Adresa a where a.objekt.idObjekta = ?") })
public class Adresa {
	private static final long serialVersionUID = 1390754703932226327L;
	private int idAdrese;
	private Objekt objekt;
	private TipAdrese tipAdrese;
	private Mjesto mjesto;
	private String ulica;
	private String broj;
	private String primatelj;

	public Adresa() {
	}

	public Adresa(final int idAdrese, final Objekt objekt,
			final TipAdrese tipAdrese, final Mjesto mjesto, final String ulica,
			final String broj, final String primatelj) {
		this.idAdrese = idAdrese;
		this.objekt = objekt;
		this.tipAdrese = tipAdrese;
		this.mjesto = mjesto;
		this.ulica = ulica;
		this.broj = broj;
		this.primatelj = primatelj;
	}

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	@Column(name = "id_adrese", unique = true, nullable = false)
	@NotNull
	public int getIdAdrese() {
		return idAdrese;
	}

	public void setIdAdrese(final int idAdrese) {
		this.idAdrese = idAdrese;
	}

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "id_objekta", nullable = false)
	@NotNull
	public Objekt getObjekt() {
		return objekt;
	}

	public void setObjekt(final Objekt objekt) {
		this.objekt = objekt;
	}

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "id_tipa_adrese", nullable = false)
	@NotNull
	public TipAdrese getTipAdrese() {
		return tipAdrese;
	}

	public void setTipAdrese(final TipAdrese tipAdrese) {
		this.tipAdrese = tipAdrese;
	}

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "id_mjesta", nullable = false)
	@NotNull
	public Mjesto getMjesto() {
		return mjesto;
	}

	public void setMjesto(final Mjesto mjesto) {
		this.mjesto = mjesto;
	}

	@Column(name = "ulica", nullable = false)
	@NotNull
	public String getUlica() {
		return ulica;
	}

	public void setUlica(final String ulica) {
		this.ulica = ulica;
	}

	@Column(name = "broj", nullable = false)
	@NotNull
	public String getBroj() {
		return broj;
	}

	public void setBroj(final String broj) {
		this.broj = broj;
	}

	@Column(name = "primatelj", nullable = true)
	public String getPrimatelj() {
		return primatelj;
	}

	public void setPrimatelj(final String primatelj) {
		this.primatelj = primatelj;
	}
}
